set(LLVM_LINK_COMPONENTS
  Support
  )

add_llvm_fuzzer(lldb-commandinterpreter-fuzzer
  EXCLUDE_FROM_ALL
  lldb-commandinterpreter-fuzzer.cpp
  )

if(TARGET lldb-commandinterpreter-fuzzer)
  target_include_directories(lldb-commandinterpreter-fuzzer PRIVATE ..)
  target_link_libraries(lldb-commandinterpreter-fuzzer
    PRIVATE
    liblldb
    )

  # A directory in the build directory is created to hold the fuzzer's
  # artifacts as a pre-build command for the command interpreter's executable
  # target. When the fuzzer exits the input artifact that caused it to exit
  # will be written to this directory.

  add_custom_command(TARGET lldb-commandinterpreter-fuzzer PRE_BUILD
    COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/fuzzer-artifacts/commandinterpreter-artifacts
    )

  add_custom_target(fuzz-lldb-commandinterpreter
    COMMENT "Running the LLDB command interpreter fuzzer..."
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/fuzzer-artifacts/commandinterpreter-artifacts
    COMMAND  $<TARGET_FILE:lldb-commandinterpreter-fuzzer> -dict=${CMAKE_CURRENT_SOURCE_DIR}/inputdictionary.txt  -only_ascii=1 -artifact_prefix=commandinterpreter-
    USES_TERMINAL
    )
endif()
